package com.jpress.beans;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.primefaces.context.RequestContext;

import com.jpress.controller.UsuarioController;
import com.jpress.exceptions.CrudException;
import com.jpress.model.Usuario;
import com.jpress.utils.FacesUtils;
import com.jpress.utils.GeralUtils;

@ManagedBean(name="UsuarioPerfilBean")
@ViewScoped
public class UsuarioPerfilBean {
	
	private Usuario usuario;
	
	@ManagedProperty(value="#{SessaoBean}")
	private SessaoBean sessaoBean;
	
	private String senhaAtual;
	private String senhaNova;
	
	private boolean novoAvatar;
	
	private UsuarioController usuarioController;
	
	@PostConstruct
	public void init(){
		usuario = sessaoBean.getUsuarioAutenticado();
		usuarioController = UsuarioController.getInstance();
		this.senhaAtual = "";
		this.senhaNova = "";
		this.novoAvatar = false;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public SessaoBean getSessaoBean() {
		return sessaoBean;
	}

	public void setSessaoBean(SessaoBean sessaoBean) {
		this.sessaoBean = sessaoBean;
	}
	
	public String getSenhaAtual() {
		return senhaAtual;
	}

	public void setSenhaAtual(String senhaAtual) {
		this.senhaAtual = senhaAtual;
	}

	public String getSenhaNova() {
		return senhaNova;
	}

	public void setSenhaNova(String senhaNova) {
		this.senhaNova = senhaNova;
	}	
	
	public boolean isNovoAvatar() {
		return novoAvatar;
	}

	public void setNovoAvatar(boolean novoAvatar) {
		this.novoAvatar = novoAvatar;
	}

	public void prepararAlteracaoAvatar(){
		RequestContext.getCurrentInstance().execute("editarAvatarDlg.show();");
	}
	
	public void salvarNovoAvatar(){
		this.novoAvatar = true;
	}
	
	public void salvarAlteracoes(){
		if(this.novoAvatar){
			this.usuario.setAvatar("" + this.usuario.getCodigo() + "_usuarios.jpg");
		}
		try {
			this.usuarioController.atualizar(this.usuario);
			FacesUtils.addSucessMessage("indexGrowl", FacesUtils.getParamMessageBundle("crud.sucessoMensagens.atualizacao", FacesUtils.getMessageBundle("usuario.titulo")));
		} catch(CrudException ce){
			FacesUtils.addErrorMessage("indexGrowl", ce.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}			
	}
	
	public void prepararAlterarSenha(){
		RequestContext.getCurrentInstance().execute("alterarSenhaDlg.show();");
	}
	
	public void alterarSenhaCancelar(){
		RequestContext.getCurrentInstance().reset("tabView:alterarSenhaForm");
		RequestContext.getCurrentInstance().update("tabView:alterarSenhaForm");
		RequestContext.getCurrentInstance().execute("alterarSenhaDlg.hide();");
	}
	
	public void alterarSenha(){
		this.senhaAtual = GeralUtils.criptografar(this.senhaAtual, "md5");
		if(!this.usuario.getSenha().equals(this.senhaAtual)){
			FacesUtils.addWarningMessage("alterarSenhaMsgs", FacesUtils.getMessageBundle("alterarSenha.senhaAtual.incorreta"));
		}else{
			this.usuario.setSenha(GeralUtils.criptografar(this.senhaNova, "md5"));
			this.senhaAtual = "";
			this.senhaNova = "";
		
			try {
				usuarioController.atualizar(usuario);
				FacesUtils.addSucessMessage("indexGrowl", FacesUtils.getMessageBundle("alterarSenha.sucesso"));
			} catch (Exception e) {
				FacesUtils.addErrorMessage("alterarSenhaMsgs", FacesUtils.getMessageBundle("alterarSenha.falha"));
			}			
		}
	}		
}
